#
# ﻿Empresa desarrolladora: Fujitsu Technology Solutions S.A. - http://ts.fujitsu.com Felipe Munoz Castillo - 29/07/2013
#
# Autor: Junta de Andalucía
# Derechos de explotación propiedad de la Junta de Andalucía.
#
# Éste programa es software libre: usted tiene derecho a redistribuirlo y/o modificarlo bajo los términos de la Licencia EUPL European Public License publicada por el organismo IDABC de la Comisión Europea, en su versión 1.0. o posteriores.
#
# Éste programa se distribuye de buena fe, pero SIN NINGUNA GARANTÍA, incluso sin las presuntas garantías implícitas de USABILIDAD o ADECUACIÓN A PROPÓSITO CONCRETO. Para mas información consulte la Licencia EUPL European Public License.
#
# Usted recibe una copia de la Licencia EUPL European Public License junto con este programa, si por algún motivo no le es posible visualizarla, puede consultarla en la siguiente URL: http://ec.europa.eu/idabc/servlets/Docb4f4.pdf?id=31980
#
# You should have received a copy of the EUPL European Public License along with this program. If not, see
# http://ec.europa.eu/idabc/servlets/Docbb6d.pdf?id=31979
#
# Vous devez avoir reçu une copie de la EUPL European Public License avec ce programme. Si non, voir http://ec.europa.eu/idabc/servlets/Doc5a41.pdf?id=31983
#
# Sie erhalten eine Kopie der europäischen EUPL Public License zusammen mit diesem Programm. Wenn nicht, finden Sie da http://ec.europa.eu/idabc/servlets/Doc9dbe.pdf?id=31977
#
#
module CustomFieldDependentHelper

  def get_custom_fields_to_show(custom_field_values, custom_field_coditioned_map)
    custom_field_to_enable=[]
    custom_fields_conditioneds=[]

    custom_field_coditioned_map.each do |condioting,value_conditioneds|

      selected_value = custom_field_values.find{|c| c.custom_field_id == condioting}
      value_conditioneds.each do |value, condietioneds|
        if ("#{selected_value}" == value)
          
          condietioneds.each do |field_conditioned|
            if (not custom_field_to_enable.include?(field_conditioned))
              custom_field_to_enable.push(field_conditioned)
            end
          end

        end
        custom_fields_conditioneds = custom_fields_conditioneds | condietioneds

      end
    
    end

    return custom_field_to_enable

  end

	def get_custom_fields_to_delete(custom_field_values, custom_field_coditioned_map)

		custom_field_to_enable=[]
		custom_fields_conditioneds=[]
		custom_fields_to_delete=[]

		custom_field_coditioned_map.each do |condioting,value_conditioneds|

			selected_value = custom_field_values.find{|c| c.custom_field_id == condioting}
			value_conditioneds.each do |value, condietioneds|
				if ("#{selected_value}" == value)
					
					condietioneds.each do |field_conditioned|
						if (not custom_field_to_enable.include?(field_conditioned))
							custom_field_to_enable.push(field_conditioned)
						end
					end

				end
				custom_fields_conditioneds = custom_fields_conditioneds | condietioneds

			end
		
		end

		custom_fields_to_delete = custom_fields_conditioneds.reject { |conditioned|
			custom_field_to_enable.include?(conditioned)
		}
		
		return custom_fields_to_delete
	end

	def get_custom_field_coditioned_map(id_projecto) 

	  cf_posibles = []

      # Cogemos los que son para todos los proyectos
      cf_para_todos = IssueCustomField.where("is_for_all=?",true)
      Rails.logger.debug(' Recibiendo: #{cf_para_todos}')
      if (not cf_para_todos.nil?)
        cf_para_todos.each{|current_cf|
              cf_posibles.push(current_cf.id)
              Rails.logger.debug(' 1 Anadido: #{current_cf.id}')
            }
      end

      # Cogemos los que son para este proyecto
      cf_para_proy = Project.find(id_projecto).issue_custom_fields
      Rails.logger.debug(' Recibiendo: #{cf_para_proy}')
      if (not cf_para_proy.nil?)
          cf_para_proy.each{|current_cf|
            cf_posibles.push(current_cf.id)
            Rails.logger.debug(' 2 Anadido: #{current_cf.id}')
          }
      end


      # Creamos un mapa con con clave el id del campo condicionante y valor otro mapa.
      # Este segundo mapa contiene como clave el valor condicionante y el listado de campos condicionados
      custom_field_dependents_map={}
      #custom_field_type={}
      cf_posibles.each{|conditioning_field|
            
            # Cogemos los valores para un campo condicionante
            conditioned_fields = CustomFieldDependent.where("conditioning_custom_field_id=? and project_id = ? and conditioned_custom_field_id IN (?)", conditioning_field, id_projecto, cf_posibles)
            custom_field_value_conditioned_map={}
            if (not conditioned_fields.nil? and conditioned_fields.size > 0)
              
              # iteramos sobre los distintos valor-campo condicionado de un campo condicionante
              conditioned_fields.each{|conditioned_field|
                
                # Cogemos el par valor condicionante, valor condicionado
                conditioned_field_id = conditioned_field.conditioned_custom_field_id
                conditioning_value = conditioned_field.conditioning_value

                # Si no exite ya una lista para ese valor condicionante, la creamos
                if(custom_field_value_conditioned_map[conditioning_value].nil?)
                  custom_field_value_conditioned_map[conditioning_value]=[]
                end

                # Insertamos el cf condicionado en la lista que tiene asociado ese valor 
                custom_field_value_conditioned_map[conditioning_value].push(conditioned_field_id)
                # Guardamos tambien su tipo
                #custom_field_type[conditioned_field_id] = CustomField.find(conditioned_field.conditioned_custom_field_id).field_format

              }

              # Cuando hemos recorrido todos los campos condicionados de ese campo condicionante,
              # relacionamos el mapa de valor-lista condicinados a ese condicionante
              custom_field_dependents_map[conditioning_field] = custom_field_value_conditioned_map
            end
      }

      return custom_field_dependents_map

	end

end